/*
 * @Author: Dorange.Wang
 * @Date: 2021-04-01 13:44:08
 * @LastEditors: your name
 * @LastEditTime: 2021-09-28 10:34:56
 * @Description: file content
 */
import Vue from 'vue'
import moment from 'moment'
import {
  MODULE_TYPE_ENUM,
  VIRTUAL_TREE_FIELD_DATA_TYPE_ENUM,
  FIELD_STATUS_ENUM,
  FORM_CREATE_TYPE_ENUM,
  PAGE_TYPE_ENUM,
  USER_STATUS_ENUM,
  USER_STATUS_BADGE_ENUM,
  ROLE_STATUS_ENUM,
  MENU_TYPE_ENUM,
  RELEASE_STATUS_ENUM,
  IMAGE_PUSH_STATUS_ENUM,
  SCRIPT_TYPE_ENUM,
  SCRIPT_SOURCE_ENUM,
  DATA_SOURCE_TYPE_ENUM,
  COMMON_ENV_ENUM,
  AUTH_TYPE_ENUM,
  SERVICE_TYPE_ENUM,
  FIELD_CREATE_TYPE_ENUM,
  LOGIN_TYPE_ENUM
} from './enum'
import { SYSTEM_FIELD } from './const'

Vue.filter('moment', function (dataStr, pattern = 'YYYY-MM-DD HH:mm:ss') {
  return dataStr ? moment(dataStr).format(pattern) : ''
})

// 模型类型
Vue.filter('moduleType', function (val) {
  const result = MODULE_TYPE_ENUM[val]
  console.log(result)
  return result || '--'
})

// 字段数据类型
Vue.filter('fieldDataType', function (val) {
  const result = VIRTUAL_TREE_FIELD_DATA_TYPE_ENUM[val]
  return result || '--'
})

// 表单创建方式
Vue.filter('formCreateType', function (val) {
  const result = FORM_CREATE_TYPE_ENUM[val]
  return result || '--'
})

// 页面类型
Vue.filter('pageType', function (val) {
  const result = PAGE_TYPE_ENUM[val]
  return result || '--'
})

// 字段类型/字段来源
Vue.filter('fieldSource', function (val) {
  if (SYSTEM_FIELD.includes(val)) {
    return '系统字段'
  } else {
    return '自定义字段'
  }
})

// 字段发布状态
Vue.filter('fieldStatus', function (val) {
  const result = FIELD_STATUS_ENUM[val]
  return result || '--'
})

// 用户状态
Vue.filter('userStatus', function (val) {
  const status = USER_STATUS_ENUM.find((item) => item.key === val)
  return status ? status.value : '--'
})

// 用户状态badge
Vue.filter('userStatusBadge', function (val) {
  const status = USER_STATUS_BADGE_ENUM.find((item) => item.key === val)
  return status ? status.value : 'info'
})

// 角色状态
Vue.filter('roleStatus', function (val) {
  const status = ROLE_STATUS_ENUM.find((item) => item.key === val)
  return status ? status.value : '--'
})

// 菜单类型
Vue.filter('menuType', function (val) {
  const result = MENU_TYPE_ENUM[val]
  return result || '--'
})

// 发布状态
Vue.filter('releaseStatus', function (val) {
  const result = RELEASE_STATUS_ENUM[val]
  return result || '--'
})

// 发布状态
Vue.filter('imagePushStatus', function (val) {
  const result = IMAGE_PUSH_STATUS_ENUM[val]
  return result || '--'
})

// 通用人员filter
Vue.filter('user', function (value) {
  const [jobNumber, name] = value
  if (jobNumber && name) {
    return `[${jobNumber}]${name}`
  } else {
    return name || jobNumber || ''
  }
})

Vue.filter('scriptType', function (val) {
  const result = SCRIPT_TYPE_ENUM[val]
  return result || val | ''
})

Vue.filter('scriptSource', function (val) {
  const result = SCRIPT_SOURCE_ENUM[val]
  return result || val || ''
})

Vue.filter('scriptDecode', function (value) {
  let rawValue = ''
  try {
    rawValue = decodeURIComponent(value)
  } catch (err) {
    console.log(err)
  }
  return value ? rawValue : value
})

Vue.filter('scriptValue', function (value, len = 200) {
  if (!value || value.length <= len) {
    return value
  } else {
    return value.substr(0, len) + '... '
  }
})

Vue.filter('version', function (value) {
  return `V${value}.0`
})

Vue.filter('dsType', function (val) {
  const result = DATA_SOURCE_TYPE_ENUM[val]
  return result || val || ''
})

Vue.filter('commonEnv', function (val) {
  const result = COMMON_ENV_ENUM[val]
  return result || val || ''
})

// 认证方式
Vue.filter('authType', function (val) {
  const result = AUTH_TYPE_ENUM[val]
  return result || val || ''
})

// 服务方式
Vue.filter('serviceType', function (val) {
  const result = SERVICE_TYPE_ENUM[val]
  return result || val || ''
})

// code name 展示
Vue.filter('codeName', function (val) {
  const [code, name] = val
  if (code && name) {
    return `${name}[${code}]`
  } else {
    return name || code || '--'
  }
})

Vue.filter('fieldCreateType', function (val) {
  const result = FIELD_CREATE_TYPE_ENUM[val]
  return result || val || ''
})

// 登录方式
Vue.filter('loginType', function (val) {
  const result = LOGIN_TYPE_ENUM[val]
  return result || val || ''
})
